/*
 *文件作用: 声明对外类型和API
 */

#ifndef LEPTJSON_H__
#define LEPTJSON_H__

//声明json的数据类型
typedef enum {
    LEPT_NULL,    // null
    LEPT_FALSE,   // false
    LEPT_TRUE,    // true
    LEPT_NUMBER,  // number
    LEPT_STRING,  // string
    LEPT_ARRAY,   // array
    LEPT_OBJECT   // object
} lept_type;

//声明json树形数据结构的节点，用以保存解析json得到的数据
//对于value，在true, false, null 的基础上, 增加 number
typedef struct {
    lept_type type;  //节点的数据类型
    double number;   //存储json数字
} lept_value;

/*
 *json语法基本格式:
 *      whitespace - value - whitespace
 */
enum {
    LEPT_PARSE_OK = 0,             //解析正确
    LEPT_PARSE_EXPECT_VALUE,       //只含有whitespace
    LEPT_PARSE_ROOT_NOT_SINGULAR,  // value之后的whitespace后跟有其他字符
    LEPT_PARSE_INVALID_VALUE,      //值不属于三种字面值
    LEPT_PARSE_NUMBER_TOO_BIG      //数字太大
};

// API 声明
int lept_parse(lept_value* v, const char* json);  //解析json字符串
lept_type lept_get_type(const lept_value* v);  //获取节点的类型
double lept_get_number(const lept_value* v);   //获取节点中的数字

#endif